This software is subject to the "Standard Amiga FD-Software Copyright Note". It is GIFTWARE/MAILWARE as defined in paragraph 4g/4b. For more information please read "AFD-COPYRIGHT" (Version 1.4 or higher).
Q: | Die beiden Dateien sind gleich (equal). |
L: | Die beiden Dateien unterscheiden sich in der Länge (length). |
C: | Die beiden Dateien sind gleich lang, unterscheiden sich aber im Inhalt (contents). |
D: | Die beiden Dateien unterscheiden sich in Länge und Inhalt (different). |
A: | Eine Datei/Verzeichnis im Verzeichnis (-Baum) B gibt es nicht in A. |
B: | Eine Datei/Verzeichnis im Verzeichnis (-Baum) A gibt es nicht in B. |
W: | Es wurde versucht eine Datei mit einem Verzeichnis zu vergleichen (object wrong type). |
E: | Es trat ein sonstiger Fehler auf, z.B. ein Lesefehler (error). |
S: | Die Datei A ist eine verkürzte Version von Datei B (A is truncated). *L |
T: | Die Datei B ist eine verkürzte Version von Datei A (B is truncated). *L |
O: | Die Datei-Kommentare stimmen nicht überein (comment). *O |
P: | Die Protection-Bits stimmen nicht überein. *P |
0: | Fehlermeldung 212: Objekt ist nicht vom geforderten Typ (A=DIR, B=FILE) *W |
1: | Fehlermeldung 212: Objekt ist nicht vom geforderten Typ (A=FILE, B=DIR) *W |
2: | Fehlermeldung 205: Objekt nicht gefunden (A=DIR, B=-) *A |
3: | Fehlermeldung 205: Objekt nicht gefunden (A=FILE, B=-) *A |
4: | Fehlermeldung 205: Objekt nicht gefunden (A=-, B=DIR) *B |
5: | Fehlermeldung 205: Objekt nicht gefunden (A=-, B=FILE) *B |
6: | Fehlermeldung 205: Objekt nicht gefunden (A=NEWDIR) *N |
7: | Fehlermeldung 205: Objekt nicht gefunden (A=NEWFILE) *N |
8: | Fehlermeldung 205: Objekt nicht gefunden (B=NEWDIR) *N |
9: | Fehlermeldung 205: Objekt nicht gefunden (B=NEWFILE) *N |
Q: | [kein Text] |
L: | Difference in length |
C: | Difference in contents |
D: | Difference in length&contents |
A,B,W,E: | The corresponding error messages (see above), since workbench 2.1 localized. |
0: | Alle Dateien sind gleich. |
5: | Eine oder mehrere Dateien sind unterschiedlich (LCDOP). |
6: | Die Datei A ist eine verkürzte Version von Datei B (S). |
7: | Die Datei B ist eine verkürzte Version von Datei A (T). |
10: | Eine oder mehrere Dateien wurden nicht gefunden / sind vom falschen Typ (ABW). |
15: | Ein sonstiger Fehler trat auf (E). |
20: | Ein schwerer Fehler trat auf / der Vergleich wurde abgebrochen. |
A/A | Die erste Datei/Verzeichnis/Pattern (siehe Benutzung). |
B/A | Die zweite Datei/Verzeichnis/Pattern (siehe Benutzung). |
ALL/S | Die beiden Verzeichnisse werden rekursiv verglichen. |
SHOW/K | Welche Ausgaben gemacht werden bzw. unterdrückt werden sollen. Anzugeben ist ein String, der alle zu machenden Ausgaben enthält. Die Ausgaben werden durch das Ergebnis-Kürzel (QLCDABWE) spezifiziert. Die Bedeutung der einzelnen Kürzel ist im Kapitel Benutzung beschrieben. Ein vorangestelltes "~" negiert die Eingabe. Standardmäßig wird alles angezeigt. |
ABORT/K | Bei welchen Ergebnissen abgebrochen werden soll. Die Angaben entsprechen denen bei SHOW. Standardmäßig wird nie abgebrochen. |
DUMP/N | Ob ein Hex-Dump ausgegeben werden soll. Bei einer positiven Zahl werden
max. DUMP unterschiedliche Zeilen ausgegeben. Gleiche Zeilen werden
nie angezeigt. Durch die Angabe einer negativen Zahl werden alle Unterschiede ausgegeben.
Bei Angabe von 0 wird der Hex-Dump ausgeschaltet.
Bei einem Vergleich zweier Dateien ist die Standardeinstellung -1, sonst 0.
Ein Hex-Dump kann durch CTRL-D abgebrochen werden, der Vergleich wird aber fortgesetzt. |
CHECKD/S | Wenn zwei zu vergleichende Dateien eine unterschiedliche Länge haben, wird standardmäßig nicht untersucht, ob der Inhalt (bis zur Längendifferenz) gleich ist. Außerdem werden Dateien ebenfalls nicht untersucht, wenn Datum und Länge identisch sind. Mit dieser Option kann dies angeschaltet werden, macht aber meistens keinen Sinn und kostet nur Zeit. Diese Option wird automatisch aktiviert, wenn DUMP ungleich 0 ist. |
ONLYA/S | Im Normalfall werden bei einem Vergleich zweier Verzeichnisse alle Dateien (Verzeichnisse) in dem 1. Baum mit dem 2., und umgekehrt, verglichen. Bei eingeschalteter Option wird nur das 1. Verzeichnis durchsucht und mit dem 2. verglichen. Dateien/Verzeichnisse, die im 2. Verzeichnis auftauchen, aber nicht im 1., werden nicht angezeigt/durchsucht. |
HLINK/S | Da es durch Links möglich ist, eine zyklische Struktur zu erzeugen,
die bei einem Vergleich nicht bemerkt wird, würde cmp im "Kreis" laufen,
und nie enden. Deswegen werden Hardlinks auf Verzeichnisse normalerweise
nicht verfolgt. Mit dieser Option kann das Verfolgen von Hardlinks auf
Verzeichnisse aktiviert werden.
Links auf Dateien werden untersucht. |
SLINK/S | Wie HLINK, ob Softlinks auf Verzeichnisse verfolgt werden sollen. |
LFORMAT/F | Dies ist wohl die umfangreichste Option von cmp. Mit ihr kann das Aussehen der Ausgabe bestimmt werden. Allerdings nicht das Aussehen des Hex-Dumps. Wie dies genau funktioniert, lesen Sie auf der folgenden Seite. |
NOSTAT/S | Diese Option schaltet die Statistik aus. |
NORC/S | Wenn diese Option eingeschaltet ist, ist der Rückgabewert außer bei
schweren Fehlern oder Benutzer-Abbruch, immer 0.
Diese Option ist speziell für die Benutzung von cmp in DOpus und ARexx-Skripts, da dort Probleme oder unerwünschte Effekte mit Rückgabewerten ungleich null auftreten können. |
DETAIL/S | Wenn diese Option angegeben wird, werden die Ergebnisse ABLW detailierter ausgegeben.
Hier die neuen Ereignisse für L: (Außerdem gibt es für diese beiden Fälle auch neue RC-Codes.) S: Die Datei A ist eine verkürzte Version von Datei B (A is truncated). T: Die Datei B ist eine verkürzte Version von Datei A (B is truncated). Hier die neuen Ereignisse für W: 0: Fehlermeldung 212: Objekt ist nicht vom geforderten Typ (A=DIR, B=FILE) 1: Fehlermeldung 212: Objekt ist nicht vom geforderten Typ (A=FILE, B=DIR) Hier die neuen Ereignisse für AB: 2: Fehlermeldung 205: Objekt nicht gefunden (A=DIR, B=-) 3: Fehlermeldung 205: Objekt nicht gefunden (A=FILE, B=-) 4: Fehlermeldung 205: Objekt nicht gefunden (A=-, B=DIR) 5: Fehlermeldung 205: Objekt nicht gefunden (A=-, B=FILE) |
NEWDIR/N | Es werden bis zur angegebenen Tiefe auch Verzeichnis-Strukturen, welche
es im anderen Baum nicht gibt, ausgegeben. Nur sinvoll im Zusammenhang mit ALL.
Eine Tiefe von <= 0 bedeutet unendlich!
Hierfür gibt es neue Ereignisse ((68)). ( siehe Ausgabe
)
Ein Beispiel für diese Option gibt es hier . |
NEWFILE/S | In den durch NEWDIR ausgegebenen Verzeichnissen werden auch Dateien ausgegeben.
Hierfür gibt es neue Ereignisse ((79)). ( siehe Ausgabe
)
Ein Beispiel für diese Option gibt es hier . |
REVADIR/S, REVBDIR/S | Normalerweise werden bei NEWDIR und NEWFILE
zuerst das Verzeichnis und dann alle Einträge ausgegeben, hiermit wird dies umgedreht.
Ein Beispiel für diese Option gibt es hier . |
DUMPALL/S | Es werden nicht nur die unterschiedlichen Zeilen, sondern alle ausgegeben. |
SKIPFIRSTNBYTES=SKIP/K/N | Es werden die ersten N Bytes in jeder Datei übersprungen. Es wird das Ergebnis L ausgegeben, wenn die Datei zu kurz ist. |
COMMENT=COM/K/N |
Wenn COM 1 bzw. -1 ist, wird groß/klein-Schreibung nicht beachtet, ansonsten schon. Im Fall einer Ungleichheit wird das Ergebnis O zurückgegeben. |
PROTBITS/S | Wenn angegeben werden unterschiede in den Protection-Bits auch ausgegeben. |
%n | Name |
%p | Pfad (QLCD: ab Vergleich, ABWE: absolut) |
%t | Pfad (QLCD: ab Vergleich, ABWE: mit vorangestelltem "A:"/"B:") |
%P | Pfad + Name (siehe %p) |
%T | Pfad + Name (siehe %t) |
%e | Fehler als Text |
%E | Fehler als Nummer |
%r | Ergebnis (QLCDABWE) |
%R | Pfad ab Vergleich |
%a | Absoluter Pfad in A |
%b | Absoluter Pfad in B |
%% | "%" |
*n, *N | Eine neue Zeile wird eingefügt |
*e, *E | Ein ESC-Zeichen wird eingefügt |
** | "*" |
Q: | 700 | "" |
L: | 701 | "Difference in length" |
C: | 702 | "Difference in contents" |
D: | 703 | "Difference in length&contents" |
A: | 704 | Fehlermeldung 205: Objekt nicht gefunden |
B: | 705 | Fehlermeldung 205: Objekt nicht gefunden |
S: | 706 | "A is a truncated version of B" |
T: | 707 | "B is a truncated version of A" |
O: | 708 | "Difference in comment" |
P: | 709 | "Difference in protection bits" |
W: | 212 | Fehlermeldung 212: Objekt ist nicht vom geforderten Typ |
E: | xxx | Fehlermeldung xxx |
0: | 800 | Fehlermeldung 212: Objekt ist nicht vom geforderten Typ (A=DIR, B=FILE) |
1: | 801 | Fehlermeldung 212: Objekt ist nicht vom geforderten Typ (A=FILE, B=DIR) |
2: | 802 | Fehlermeldung 205: Objekt nicht gefunden (A=DIR, B=-) |
3: | 803 | Fehlermeldung 205: Objekt nicht gefunden (A=FILE, B=-) |
4: | 804 | Fehlermeldung 205: Objekt nicht gefunden (A=-, B=DIR) |
5: | 805 | Fehlermeldung 205: Objekt nicht gefunden (A=-, B=FILE) |
6: | 806 | Fehlermeldung 205: Objekt nicht gefunden (A=NEWDIR) |
7: | 807 | Fehlermeldung 205: Objekt nicht gefunden (A=NEWFILE) |
8: | 808 | Fehlermeldung 205: Objekt nicht gefunden (B=NEWDIR) |
9: | 809 | Fehlermeldung 205: Objekt nicht gefunden (B=NEWFILE) |
2.0 | 2000-11-26 |
|
1.9 | 2000-10-08 |
|
1.8 | 2000-02-11 |
|
1.7 | 2000-01-25 |
|
1.6 | -internal- |
|
1.5 | 1999-04-07 |
|
1.4 | 1997-05-21 |
|
1.3 | 1997-04-16 |
|
1.2 | 1997-04-10 |
|
1.1 | 1997-02-28 |
|
1.0 | 1997-02-18 |
|
DUMP: Disk.info Test.info 0010: 00000002 00000A40 .......@ 00000002 0000099B ........ 0018: 00000CBF 00000106 ...¿.... 000001B6 00000017 ...¶.... 0020: 000003E9 00000A40 ...é...@ 000003E9 0000099B ...é.... 0028: 2C780004 2A4F226E ,x..*O"n 48E77EFE 24482400 Hç~þ$H$. 0030: 01144AA9 00AC6652 ..J©.¬fR 49F90000 00002C78 Iù....,x 0038: 41E9005C 2F084EAE Aé.\/.N® 000447F9 000005AC ..Gù...¬ Disk.info: Found 31 differences in contents&length until abort
/* ** Update only all neccesary files from dir A -> dir B ** ©1999/2000 ALeX Kazik */ /* IMPORTANT: the src/dst dir MUST end with a colon or slash and MUST NOT be empty! */ /* SOURCE directory */ src = 'a/' /* DESTINATION directory */ dst = 'b/' /* the script to create, and which will be executed */ script = 'T:script' /* SKIP the first N bytes */ skip = 0 /* temporary file */ tmpfile = 'T:update.tmp' /* ** The main-program */ ADDRESS COMMAND cmp 'A="' || src || '" B="' || dst || '" all nostat norc skipfirstnbytes=' || SKIP , || ' newdir=10 newfile revbdir detail lformat %r%R%n >"' || TMPFILE || '"' IF RC >= 20 THEN DO SAY 'Error while executing cmp' EXIT RC END CALL OPEN(tmp, tmpfile, 'read') CALL OPEN(scr, script, 'write') eq = 0 DO UNTIL EOF(tmp) act = READCH(tmp, 1) file = READLN(tmp) IF act = '' THEN BREAK ELSE IF act = 'Q' THEN eq = eq + 1 ELSE IF (act = 'A') | (act = '5') | (act = '9') THEN DO SAY 'File to remove: ' || file CALL WRITELN(scr, 'delete "' || dst || file || '" quiet') END ELSE IF (act = '4') | (act = '8') THEN DO SAY 'Dir to remove: ' || file CALL WRITELN(scr, 'delete "' || dst || file || '" quiet') END ELSE IF (act = 'B') | (act = '3') | (act = '7') THEN DO SAY 'New File: ' || file CALL WRITELN(scr, 'copy "' || src || file || '" "' || dst || file || '"') END ELSE IF (act = '2') | (act = '6') THEN DO SAY 'New Dir: ' || file CALL WRITELN(scr, 'makedir "' || dst || file || '"') END ELSE IF (act = 'E') | (act = '0') | (act = '1') THEN DO SAY 'Error/Warning at dir/file: ' || file EXIT 20 END ELSE IF (act = 'L') | (act = 'C') | (act = 'D') | (act = 'S') | (act = 'T') THEN DO SAY 'File to Update: ' || file CALL WRITELN(scr, 'copy "' || src || file || '" "' || dst || file || '"') END ELSE DO SAY 'Unknown Symbol >' || act || '<' CALL CLOSE(tmp) CALL CLOSE(scr) EXIT 20 END END SAY eq || ' Equal files.' CALL CLOSE(tmp) CALL CLOSE(scr) /* ** executing the changes */ execute '"' || script || '"' /* ** That's all. */